1 事件位置属性支持情况

Safari和Chrome这两个Webkit发源的兄弟,将所有见过的属性都支持了。。。

1.1 Event.screenX,Event.screenY

  • W3C+ IE+ Firefox+ Opera+ Safari+ chrome+

W3C标准属性,所有浏览器都支持

1.2 Event.clientX,Event.clientY

  • W3C+ IE+ Firefox+ Opera+ Safari+ chrome+

W3C标准属性,所有浏览器都支持

1.3 Event.pageX,Event.pageY

  • W3C- IE- Firefox+ Opera+ Safari+ chrome+

非标准属性,IE不支持

1.4 Event.layerX,Event.layerY

  • W3C- IE- Firefox+ Opera- Safari+ chrome+

非标准属性,IE和Opera不支持

1.5 Event.offsetX,Event.offsetY

  • W3C- IE+ Firefox- Opera+ Safari+ chrome+

非标准属性,Firefox不支持

1.6 Event.x, Event.y

  • W3C- IE+ Firefox- Opera+ Safari+ chrome+

非标准属性,Firefox不支持

2 Event对象属性

  • clientX clientY
  • screenX screenY
  • pageX pageY
  • layerX layerY
  • offsetX offsetY
  • x y

2.1 Event.screenX, Event.screenY

发生事件的位置相对于屏幕左上角的坐标,所有浏览器都支持的标准属性。

2.2 Event.clientX, Event.clientY

发生事件的位置相对于可视区域左上角的坐标,所有浏览器都支持的标准属性。

2.3 Event.pageX,Event.pageY

不是标准的属性,但被广泛的支持,类似于clientX和clientY,它们使用的是文档坐标而不是窗口坐标,表示当前点与页面左上角的距离,包含滚动距离。IE6-8不支持此属性。替代的属性为Event.offsetX,Event.offsetY。

2.4 Event.layerX, Event.layerY

最近的绝对定位的父元素位置,以border左上角为原点,如果没有就为document,IE6-8,Opera不支持此属性,替代属性为Event.offsetX,Event.offsetY。

2.5 Event.offsetX,Event.offsetY

最近的绝对定位的父元素位置, 如果没有就为document,Firefox不支持此属性。替代属性为Event.layerX,Event.layerY。

2.6 Event.x, Event.y

事件发生位置的x坐标和y坐标,它们相对于CSS动态定位的最内层包容元素,仅IE8及更早的版本支持。

3 Element对象属性

  • clientHeight clientWidth
  • clientLeft clientTop
  • offsetHeight offsetWidth
  • offsetLeft offsetTop
  • scrollHeight scrollWidth
  • scrollLeft scrollTop

3.1 Element.clientHeight,Element.clientWidth

元素内部的尺寸(元素内边距和内容的尺寸),除去滚动条和其他包装元素之外的尺寸,如果当前元素是根元素document.documentElement,这个两个属性等于浏览器可视窗口的尺寸。

3.2 Element.clientLeft,Element.clientTop

元素边框的宽度加滚动的距离,如果没有滚动,返回的是边框的宽度。

3.3 Element.offsetHeight,Element.offsetWidth

当前元素极其所有内容的高度及宽度,单位为像素,包括元素的CSS内边距及边框及滚动条,但不包括外边距,也不包括滚动的部分,仅仅返回可见区域的宽高。

3.4 Element.offsetLeft,Element.offsetTop

当前元素菜单CSS边框的左上角相对于他的offsetParent容器元素的坐标。

3.5 Element.scrollHeight,Element.scrollWidth

元素的全部宽度和高度,包含滚动的部分(比如div overflow:scroll)

3.6 Element.scrollLeft,Element.scrollTop

元素滚动过的距离。

4 Window对象属性

  • innerHeight innerWidth
  • outerHeight outerWidth
  • screenX screenY
  • pageXOffset pageYOffset
  • scrollX scrollY

4.1 Window.innerHeight,Window.innerWidth

当前窗口显示区域的文档的高度和宽度,不包含浏览器的边框,单包含滚动条,单位是像素,IE8及更早的版本不支持。

4.2 Window.outerHeight,Window.outerWidth

当前浏览器窗口的总高度和宽度、包含浏览器的边框,单位为像素,IE8及更早的版本不支持。

4.3 Window.screenLeft,Window.screenTop

窗口的左上角(浏览器的内边缘)在屏幕上的X坐标和Y坐标;
IE、Safari、Opera支持screenLeft和screenTop
Firefox和Safari支持screenX和screenY

4.4 Window.screenX,Window.screenY

浏览器的外边缘到屏幕边缘的距离。

4.5 Window.pageXOffset,Window.pageYOffset

在Firefox中window.pageXOffset == window.scrollX; // always true,这两个是一回事。
当前温度向右和向下滚动过的像素数,IE8及更早的版本中不支持这些属性,IE中替代的属性使document.documentElement或者document.body 的scrollLeft和scrollTop属性

4.6 Window.scrollX, Window.scrollY

表示浏览器X轴(水平)、Y轴(垂直)滚动条的偏移距离。

5 Screen对象属性

5.1 Screen.width,Screen.height

屏幕的宽度、高度(指的是屏幕的分辨率,单位为像素)

5.2 Screen.availWidth,Screen.availHeight

屏幕的可用宽度、高度(通常与屏幕的宽度、高度一致)

6 兼容方案

6.1 获取滚动距离

var x = (window.pageXOffset !== undefined)
  ? window.pageXOffset
  : (document.documentElement || document.body.parentNode || document.body).scrollLeft;

var y = (window.pageYOffset !== undefined)
  ? window.pageYOffset
  : (document.documentElement || document.body.parentNode || document.body).scrollTop;

7 参考资料

  1. 前端攻城狮学习笔记九:让你彻底弄清offset)
  2. 各个属性测试demo
  3. 各浏览器的鼠标位置测试
  4. pageX、clientX、screenX、offsetX、layerX、x
  5. pageX,clientX,offsetX,layerX的区别
  6. JavaScript网页定位详解
  7. JavaScript中的一些定位属性图解
  8. pageX,clientX,screenX,offsetX区别
  9. 获取浏览器滚动条的偏移距离
  10. MDN-Window.scrollX
  11. scrollLeft,scrollTop兼容差异
  12. JavaScript事件对象 坐标说明
  13. 原生JS活树鼠标坐标方法详解
  14. javascript的offset、client、scroll使用方法详解
  15. JavaScript获取浏览器的高度和宽度值
  16. JavaScript概念之screen/client/offset/scroll/inner/avail的width/left
  17. offsetLeft,Left,clientLeft的区别
  18. 用Javascript获取页面元素的位置
  19. JavaScript获取DOM元素位置和尺寸大小
  20. HTML DOM Element
  21. javascript中top、clientTop、scrollTop、offsetTop的讲解

最后更新: 2022年03月02日 03:32

原始链接: http://rawbin-.github.io/dev-app/2015-06-11-position-in-page/

× 赞赏这个人~
打赏二维码